[入门级]帮忙写几句SQL

来源:百度知道 编辑:UC知道 时间:2024/06/01 08:03:51
我的数据库如下(sqlite的,所以只有一个数据库只有一个文件):
1.成绩表Mark:courseID科目代码,ID学号,mark成绩
2.注册信息表Registry:classID班级代码,ID学号,name学生姓名,RegDate注册年份
3.选课信息表Elective:courseID科目代码,ID学号,session第几学期选的
4.科目信息表course:courseID科目代码,name科目名,session第几学期的课

实现以下几个功能,每个功能只能用一句SQL:
1.列出所有的班,及其每科的平均分,像这样:
班1 科目1的ID 科目1的名字 均分
班1 科目2的ID 科目1的名字 均分
班2 科目1的ID 科目1的名字 均分
班2 科目2的ID 科目1的名字 均分
……
1.5 列出所有的班,及其每科选课人数,类似1

2.列出每科的选课人数及本身的信息:
科目1的ID 科目1的名字 科目1的选课人数 科目1的学期
科目2的ID 科目2的名字 科目2的选课人数 科目2的学期

3.列出每科的不及格(mark<60)人数,分班列:
科目1的ID 科目1的名字 班1选科目1的不及格人数
科目1的ID 科目1的名字 班2选科目1的不及格人数
科目2的ID 科目2的名字 班1选科目1的不及格人数
科目2的ID 科目2的名字 班2选科目1的不及格人数
4.列出每科的 前五名 学生信息:
科目1的ID 科目1的名字 科目1的第1名
科目1的ID 科目1的名字 科目1的第2名
科目1的ID 科目1的名字 科目1的第3名
……
科目2的ID 科目2的名字 科目2的第1名
科目2的ID 科目2的名字 科目2的第2名
……

每个功能只用一条SQL,各位帮忙啊,答对追加分!先谢谢了。

1.
SELECT R.classID, C.courseID, C.name, AVG(M.mark)
FROM Registry AS R
INNER JOIN Electrive AS E
ON (R.[ID] = E.[ID])
INNER JOIN Course AS C
ON (E.[CourseID] = C.[CourseID])
INNER JOIN Mark AS M
ON (C.[CourseID] = M.[CourseID])
GROUP BY R.classID, C.courseID, C.name

1.5
SELECT R.classID, C.courseID, C.name, COUNT(*)
FROM Registry AS R
INNER JOIN Electrive AS E
ON (R.[ID] = E.[ID])
INNER JOIN Course AS C
ON (E.[CourseID] = C.[CourseID])
GROUP BY R.classID, C.courseID, C.name

2.
SELECT C.courseID, C.name, (
SELECT COUNT(*)
FROM Electrive AS E
WHERE (E.[CourseID] = C.[CourseID])
) AS RegisterCount, Session
FROM Course AS C

3.
SELECT R.classID, C.courseID, C.name, COUNT(*)
FROM Registry AS R
INNER JOIN Electrive AS E
ON (R.[ID] = E.[ID])
INNER JOIN Course AS C
ON (E.[CourseID] = C.[CourseID])
INNER JOIN Mark